#ifndef _ACCMGR_H
#define _ACCMGR_H

#include "Common.h"
#include "Policies/Singleton.h"
#include <string>

enum AccountOpResult
{
    AOR_OK,
    AOR_NAME_TOO_LONG,
    AOR_PASS_TOO_LONG,
    AOR_NAME_ALREDY_EXIST,
    AOR_NAME_NOT_EXIST,
    AOR_DB_INTERNAL_ERROR
};

#define MAX_ACCOUNT_STR 16

class AccountMgr
{
public:
							AccountMgr();
							~AccountMgr();

public:///
    AccountOpResult			CreateAccount(std::string username, std::string password);
    AccountOpResult			DeleteAccount(uint32 accid);
    AccountOpResult			ChangeUsername(uint32 accid, std::string new_uname, std::string new_passwd);
    AccountOpResult			ChangePassword(uint32 accid, std::string new_passwd);
    bool					CheckPassword(uint32 accid, std::string passwd);

    uint32					GetId(std::string username);
    AccountTypes			GetSecurity(uint32 acc_id);
    bool					GetName(uint32 acc_id, std::string &name);
    uint32					GetCharactersCount(uint32 acc_id);
    std::string				CalculateShaPassHash(std::string& name, std::string& password);

    static bool				normalizeString(std::string& utf8str);
};

#define sAccountMgr MaNGOS::Singleton<AccountMgr>::Instance()
#endif
